﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web.Mail;
using System.Web;
using System.Web.UI;
using Microsoft.SharePoint;
using System.DirectoryServices;
using System.Diagnostics;

namespace WorkFlowMembroComunidade
{
    class AtivaFeature : SPFeatureReceiver
    {
        //Ativa Feature
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            //////EventLog.WriteEntry("Feature Membro Comunidade Ativa Feature", "Ativa Feature", ////EventLogEntryType.Warning);
            try
            {
                using (SPSite site = properties.Feature.Parent as SPSite)
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                        string ClassName = "WorkFlowMembroComunidade.AprovaMembro";

                        ////EventLog.WriteEntry("Feature Membro Comunidade Carrega AssemblyName", AssemblyName, ////EventLogEntryType.Warning);

                        web.Lists["Membros da Comunidade"].EventReceivers.Add(SPEventReceiverType.ItemAdded, AssemblyName, ClassName);
                        web.Lists["Membros da Comunidade"].EventReceivers.Add(SPEventReceiverType.ItemUpdated, AssemblyName, ClassName);
                    }
                }
            }
            catch
            {
                //Tratar erro na tentativa de registrar o Event Receiver
                //////EventLog.WriteEntry("Feature Membro Comunidade", "Erro ao Ativar a Feature.", ////EventLogEntryType.Error);
            }



        }

        //Desativa a Feature
        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            //Remove o EventReceiver a lista Membros da Comunidade ABDI
            try
            {
                using (SPSite site = properties.Feature.Parent as SPSite)
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                        SPList ListC = web.Lists["Membros da Comunidade"];

                        //Excluindo o Event Receiver na Lista Selecionada                                                
                        for (int i = 0; i < ListC.EventReceivers.Count; i++)
                        {
                            if (ListC.EventReceivers[i].Assembly.Equals(AssemblyName))
                               ListC.EventReceivers[i].Delete();
                            //////EventLog.WriteEntry("Feature Membro Comunidade", "Remover o Assembly: " + AssemblyName, ////EventLogEntryType.Warning);

                        }
                        ListC.Update();
                        web.Update();

                    }
                }
            }
            catch
            {
                ////EventLog.WriteEntry("Feature Membro Comunidade", "Erro ao desativar a Feature não foi possivel remover o Assembly.", ////EventLogEntryType.Error);
            }
        }

        public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        {
            //FeatureInstalled;
        }


        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        {
            //Remove o EventReceiver a lista Membros da Comunidade ABDI
            try
            {
                using (SPSite site = properties.Feature.Parent as SPSite)
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                        SPList ListC = web.Lists["Membros da Comunidade"];

                        //Excluindo o Event Receiver na Lista Selecionada                                                
                        for (int i = 0; i < ListC.EventReceivers.Count; i++)
                        {
                            if (ListC.EventReceivers[i].Assembly.Equals(AssemblyName))
                                ListC.EventReceivers[i].Delete();
                            ////EventLog.WriteEntry("Feature Membro Comunidade", "Remover o Assembly: " + AssemblyName, ////EventLogEntryType.Warning);
                        }
                        ListC.Update();
                        web.Update();

                    }
                }
            }
            catch
            {
                ////EventLog.WriteEntry("Feature Membro Comunidade", "Erro ao desativar a Feature não foi possivel remover o Assembly.", ////EventLogEntryType.Error);
            }
        }
    }

}
